﻿using System;
using System.Collections.Generic;
using Algoritmia.DataStructures.Digraphs;
using Algoritmia.DataStructures.Maps;

namespace Algoritmia.Problems.AllShortestPaths
{
    public interface IAllShortestPathsFinder<T,TResult>
    {
        IEnumerable<KeyValuePair<Tuple<T,T>, TResult>> Distances(IDigraph<T> g, WeightingFunction<T, TResult> d);
        IMap<Tuple<T, T>, T> Backpointers(IDigraph<T> g, WeightingFunction<T, TResult> d);
        IEnumerable<IEnumerable<T>> ShortestPaths(IDigraph<T> g, WeightingFunction<T, double> d = null,
                                                  IMap<Tuple<T, T>, T> backpointers = null);
    }
}
